package com.tianji.learning.service;

import com.tianji.common.domain.dto.PageDTO;
import com.tianji.common.domain.query.PageQuery;
import com.tianji.learning.domain.dto.LearningPlanDTO;
import com.tianji.learning.domain.po.LearningLesson;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tianji.learning.domain.vo.LearningLessonVO;
import com.tianji.learning.domain.vo.LearningPlanPageVO;

import java.util.List;

/**
 * <p>
 * 学生课程表 服务类
 * </p>
 *
 * @author hc
 * @since 2024-08-20
 */
public interface ILearningLessonService extends IService<LearningLesson> {

    /**
     * 将购买的课程加入到我的课程
     *
     * @param userId    购买人id
     * @param courseIds 购买的课程id
     */
    void addMyLessonsByCourseIds(Long userId, List<Long> courseIds);

    /**
     *  查询已购买的课程列表
     * @param pageQuery 查询条件
     * @return   已购买的课程列表
     */
    PageDTO<LearningLessonVO> pageQueryMyLessons(PageQuery pageQuery);

    /**
     *  查询当前正在学习的课程
     * @return  课程
     */
    LearningLessonVO queryMyNowStudy();

    /**
     *  查询用户课表中指定课程状态
     * @param courseId 课程id
     * @return  课程vo
     */
    LearningLessonVO queryLessonStatus(Long courseId);

    /**
     * 校验当前用户是否可以学习当前课程
     * @param courseId 课程id
     * @return lessonId：课程有效，null：课程无效，不能学习
     */
    Long isLessonValid(Long courseId);


    /**
     * 统计课程学习人数
     * @param courseId 课程id
     * @return 学习人数
     */
    Integer countLearningLessonByCourse(Long courseId);

    /**
     *  用户删除课程
     * @param courseId 课程id
     */
    void deleteLesson(Long courseId);

    /**
     *  退款后删除课程
     * @param userId 用户id
     * @param courseIds 课程id
     */
    void deleteMyLessonsByCourseIds(Long userId, List<Long> courseIds);

    /**
     * 创建或者更新课表计划
     * @param planDTO 课程表id和每周学习频率
     */
    void addLearningPlan(LearningPlanDTO planDTO);

    /**
     *  查询学习计划进度
     * @param pageQuery 分页查询条件
     * @return
     */
    LearningPlanPageVO pageQueryLearningPlan(PageQuery pageQuery);
}
